package cn.liontalk.demo;

/**
 * @author: 周哲
 * @package: cn.liontalk.demo
 * @description: 类锁
 * @date: 2019/1/26 12:40
 * @version: V1.0
 */
public class SynchronizedClassStatic4 implements Runnable {

    static SynchronizedClassStatic4 instance = new SynchronizedClassStatic4();
    static SynchronizedClassStatic4 instance2 = new SynchronizedClassStatic4();


    /**
     * 概念: Java 类可能有很多个对象 但是之后1个Class对象
     * <p>
     * 形式1 ： synchronized 加在static 方法上
     * <p>
     * 形式2 ： synchronized (*.class) 代码块
     * <p>
     * <p>
     * 用法和效果： 类锁只能在同一时刻被一个对象所拥有
     */

    public void run() {
        test();
    }

    public static synchronized void test() {
        System.out.println("我是对象锁的lock0 :  代码块形式：" + Thread.currentThread().getName());
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(Thread.currentThread().getName() + "：运行完成");
    }


    public static void main(String[] args) {
        Thread thread = new Thread(instance);
        Thread thread1 = new Thread(instance2);

        thread.start();
        thread1.start();
        while (thread.isAlive() || thread1.isAlive()) {

        }
        System.out.println("Finished....");
    }


}
